﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGERP_Entidades;
using SIGERP_Negocio;

namespace SIGERP_Presentacion
{
    public partial class frmReportesMain : Form
    {
        
        private ErrorProvider ep = new ErrorProvider();
        private List<SubtipoReclamo> subtiposR = SubtiposReclamo.buscarSubtipos();
        private List<Area> listaAreas = Areas.buscarAreas();


        public frmReportesMain()
        {
            InitializeComponent();
            panelArea.Visible = false;
            panelSubtipo.Visible = false;
            panelDepartamento.Visible = false;
            this.Height = 180;
            if (Config.usuario.tipo.id == 2) 
            {
                this.cmbTipoReporte.Items.AddRange(new object[] {
            "Estado del Área",
            "Estado del Departamento"});
            }
        }

        private void btnIngresar_Click(object sender, EventArgs e)
        {
            ep.Clear();

            if (dtpFechaDesde.Value.Date > dtpFechaHasta.Value.Date)
            {
                ep.SetError(dtpFechaDesde, "No puede ser mayor a la fecha hasta");
                dtpFechaDesde.Focus();
                return;
            }

            
            if (dtpFechaDesde.Value.Date > DateTime.Now.Date)
            {
                ep.SetError(dtpFechaDesde, "No puede ser mayor a la fecha de hoy");
                dtpFechaDesde.Focus();
                return;
            }

            if (dtpFechaHasta.Value.Date > DateTime.Now.Date)
            {
                ep.SetError(dtpFechaDesde, "No puede ser mayor a la fecha de hoy");
                dtpFechaDesde.Focus();
                return;
            }

            if (cmbTipoReporte.SelectedItem == null)
            {
                ep.SetError(cmbTipoReporte, "Debe seleccionar un tipo de reporte");
                cmbTipoReporte.Focus();
                return;
            }

            else
            {
                if (cmbTipoReporte.SelectedItem.Equals("Estado global de Reclamos"))
                {
                    informeGlobal();
                }

                if (cmbTipoReporte.SelectedItem.Equals("Estado del Área"))
                {
                    if (cmbArea.SelectedItem == null)
                    {
                        ep.SetError(cmbArea, "Debe seleccionar un Área");
                        cmbArea.Focus();
                        return;
                    }

                    informeArea();
                }

                if (cmbTipoReporte.SelectedItem.Equals("Infome de Subtipo"))
                {
                    if (cmbSubtipo.SelectedItem == null)
                    {
                        ep.SetError(cmbSubtipo, "Debe seleccionar un Subtipo");
                        cmbSubtipo.Focus();
                        return;
                    }
                    
                    informeSubtipo();
                }
                
                if(cmbTipoReporte.SelectedItem.Equals("Informe de Clientes Disconformes"))
                {
                    informeClientes();
                }

                if (cmbTipoReporte.SelectedItem.Equals("Estado del Departamento"))
                {
                    if (cmbDepartamento.SelectedItem == null)
                    {
                        ep.SetError(cmbSubtipo, "Debe seleccionar un Departamento");
                        cmbDepartamento.Focus();
                        return;
                    }
                    
                    informeDepartamentos();
                }

            }
        }

        private void informeGlobal()
        {
            frmReporteGlobal reporte = new frmReporteGlobal();
            reporte.fechaDesde = dtpFechaDesde.Value;
            reporte.fechaHasta = dtpFechaHasta.Value;
            reporte.MdiParent = this.MdiParent;
            reporte.WindowState = FormWindowState.Maximized;
            reporte.Show();
            Close();
        }

        private void informeArea()
        {
            frmReporteArea reporte = new frmReporteArea();
            reporte.fechaDesde = dtpFechaDesde.Value;
            reporte.fechaHasta = dtpFechaHasta.Value;
            reporte.area = ((Area)cmbArea.SelectedItem);
            reporte.MdiParent = this.MdiParent;
            reporte.WindowState = FormWindowState.Maximized;
            reporte.Show();
            Close();
        }

        private void informeDepartamentos()
        {
            frmReporteDepartamento reporte = new frmReporteDepartamento();
            reporte.fechaDesde = dtpFechaDesde.Value;
            reporte.fechaHasta = dtpFechaHasta.Value;
            reporte.departamento = reporte.departamento = ((Departamento)cmbDepartamento.SelectedItem);
            reporte.MdiParent = this.MdiParent;
            reporte.WindowState = FormWindowState.Maximized;
            reporte.Show();
            Close();
        }

        private void informeClientes()
        {
            frmReclamosPorClientes reporte = new frmReclamosPorClientes();
            reporte.fechaDesde = dtpFechaDesde.Value;
            reporte.fechaHasta = dtpFechaHasta.Value;
            reporte.MdiParent = this.MdiParent;
            reporte.WindowState = FormWindowState.Maximized;
            reporte.Show();
            Close();
        }

        private void informeSubtipo()
        {
            frmInformeSubtipo reporte = new frmInformeSubtipo();
            reporte.fechaDesde = dtpFechaDesde.Value;
            reporte.fechaHasta = dtpFechaHasta.Value;
            reporte.subtipo = ((SubtipoReclamo)cmbSubtipo.SelectedItem);
            reporte.MdiParent = this.MdiParent;
            reporte.WindowState = FormWindowState.Maximized;
            reporte.Show();
            Close();
        }

        private void cargaCmbSubTipoReclamo(List<SubtipoReclamo> sts)
        {
            cmbSubtipo.Items.Clear();
            foreach (SubtipoReclamo st in sts)
            {
                cmbSubtipo.Items.Add(st);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }

        private List<SubtipoReclamo> busqueda(String letras)
        {
            List<SubtipoReclamo> strs = new List<SubtipoReclamo>();
            foreach (SubtipoReclamo st in subtiposR)
            {
                //BUSCO POR DESCRIPCION DE SUBTIPO
                if (st.descripcion.Contains(letras)) strs.Add(st);
                //SINO BUSCO POR DESCRIPCION DE TIPO
                else if (st.tipo.descripcion.Contains(letras)) strs.Add(st);
            }
            return strs;
        }

        private void cmbSubtipo_TextUpdate(object sender, EventArgs e)
        {
            String letras = cmbSubtipo.Text.ToUpper();

            if (letras.Length > 2)
            {
                cargaCmbSubTipoReclamo(busqueda(letras));
                cmbSubtipo.DroppedDown = true;

            }
            else
            {
                cmbSubtipo.DroppedDown = false;
                cargaCmbSubTipoReclamo(subtiposR);
            }
            cmbSubtipo.SelectionStart = letras.Length;

        }

        private void frmReportesMain_Load(object sender, EventArgs e)
        {
            List<Area> listaAreas = Areas.buscarAreas();
            cmbArea.Items.Clear();
            foreach (Area a in listaAreas)
            {
                cmbArea.Items.Add(a);
            }
        }

        private void cmbTipoReporte_SelectedIndexChanged(object sender, EventArgs e)
        {
            panelArea.Visible = false;
            panelSubtipo.Visible=false;
            panelDepartamento.Visible = false;
            Height = 180;


            if (cmbTipoReporte.SelectedItem.Equals("Infome de Subtipo"))
            {
                panelSubtipo.Visible = true;
                cargaCmbSubTipoReclamo(subtiposR);
                Height = 205;
            }

            if (cmbTipoReporte.SelectedItem.Equals("Estado del Área"))
            {
                panelArea.Visible = true;
                Height = 205;
            }

            if (cmbTipoReporte.SelectedItem.Equals("Estado del Departamento"))
            {   
                panelArea.Visible = true;
                panelDepartamento.Visible = true;
                Height = 230;
                
            }
   
        }

        private void cmbArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            cmbDepartamento.Items.Clear();
            List<Departamento> departamentos = Departamentos.buscarDepartamentosArea((Area)cmbArea.SelectedItem);
            foreach (Departamento d in departamentos)
            {
                cmbDepartamento.Items.Add(d);
            }
        }

        private void toolStripAyuda_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, "/SIGERP_AYUDA.chm", HelpNavigator.Topic, "frmReportesMain.htm");
        }

    }
}
